const baseModel = require('./base.js');

class userModel extends baseModel {
    getName() {
        return 'user';
    }

    getSchema() {
        return {
            username: {
                type: String,
                required: true
            },
            password: {
                type: String,
                required: true
            },
            email: {
                type: String,
                required: true
            },
            passsalt: String,
            study: {type: Boolean, default: false},
            role: String,
            add_time: Number,
            up_time: Number,
            type: {type: String, enum: ['site', 'third'], default: "site"} //site用户是网站注册用户, third是第三方登录过来的用户
        };
    }

    save(data) {
        let user = new this.model(data);
        return user.save();
    }

    checkRepeat(email) {
        return this.model.count({
            email: email
        });
    }

    list() {
        return this.model.find().select('_id username email role type  add_time up_time study').exec();  //显示id name email role 
    }

    findByUids(uids) {
        return this.model.find({
            _id: { $in: uids }
        }).select('_id username email role type  add_time up_time study').exec();
    }

    listWithPaging(page, limit) {
        page = parseInt(page);
        limit = parseInt(limit);
        return this.model.find().sort({ _id: -1 }).skip((page - 1) * limit).limit(limit).select('_id username email role type  add_time up_time study').exec();
    }

    listCount() {
        return this.model.count();
    }
    
    findByEmail(email) {
        return this.model.findOne({ email: email });
    }

    findById(id) {
        return this.model.findOne({
            _id: id
        });
    }

    del(id) {
        return this.model.remove({
            _id: id
        });
    }

    update(id, data) {
        return this.model.update({
            _id: id
        }, data);
    }

    search(keyword) {
        return this.model.find({
            $or: [
                { email: new RegExp(keyword, 'i') },
                { username: new RegExp(keyword, 'i') }
            ]
        }, {
            passsalt: 0,
            password: 0
        }).limit(10);
    }
}

module.exports = userModel;